Spring ORM-এ Optimistic Locking এবং Pessimistic Locking হল কনকারেন্সি কন্ট্রোল মেকানিজম, যা ডাটাবেস অ্যাক্সেস করার সময় ডেটার সঠিকতা নিশ্চিত করে। ডেটা পরিবর্তনের সময় মাল্টিপল ট্রানজ্যাকশনের মধ্যে সংঘর্ষ এড়ানোর জন্য এগুলো ব্যবহৃত হয়।
Optimistic Locking হল এমন একটি পদ্ধতি যেখানে ধরে নেওয়া হয়, একই ডেটা একই সময়ে অন্য কেউ আপডেট করবে না। এটি ডেটা আপডেটের আগে চেক করে, ডেটা পরিবর্তিত হয়েছে কিনা।
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private Double price;
@Version
private int version;
// Getters and Setters
}
version
ফিল্ডটি Hibernate দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়।version
যাচাই করে।version
মিলে না যায়, তখন OptimisticLockException নিক্ষেপ করা হয়।Pessimistic Locking এমন একটি পদ্ধতি যেখানে ধরে নেওয়া হয়, একই ডেটা অন্য কেউ একসাথে আপডেট করতে পারে। এটি প্রতিরোধ করার জন্য, ডেটা পড়ার বা লেখার সময় লক প্রয়োগ করা হয়।
public Product findWithPessimisticLock(Long id) {
return entityManager.find(Product.class, id, LockModeType.PESSIMISTIC_WRITE);
}
PESSIMISTIC_READ
: রিড অপারেশন লক করে, তবে ডেটা পরিবর্তন করতে দেয় না।PESSIMISTIC_WRITE
: রাইট অপারেশন লক করে, অন্য ট্রানজ্যাকশনকে সম্পূর্ণ ব্লক করে।PESSIMISTIC_FORCE_INCREMENT
: রাইটের সাথে সাথে version
ইনক্রিমেন্ট করে।প্যারামিটার | Optimistic Locking | Pessimistic Locking |
---|---|---|
লকিং কৌশল | লক প্রয়োগ করা হয় না। | লক প্রয়োগ করা হয়। |
কনফ্লিক্ট সমাধান | Version বা Timestamp দিয়ে সংঘর্ষ নির্ধারণ। | ট্রানজ্যাকশন লক দিয়ে সংঘর্ষ প্রতিরোধ। |
Deadlock এর ঝুঁকি | Deadlock এর কোনো ঝুঁকি নেই। | Deadlock এর ঝুঁকি রয়েছে। |
পারফরম্যান্স | বেশি পড়া-লেখা কার্যক্রমে ভালো পারফরম্যান্স। | বেশি লেখার কার্যক্রমে কার্যকর। |
ব্যবহারিক ক্ষেত্র | কম কনকারেন্ট রাইট অপারেশনের জন্য উপযুক্ত। | বেশি কনকারেন্ট রাইট অপারেশনের জন্য উপযুক্ত। |
ব্যবহার | @Version ব্যবহার করে সহজে কনফিগার করা যায়। | LockModeType ব্যবহার করে কনফিগার করতে হয়। |
try {
product.setPrice(500.0);
productRepository.save(product);
} catch (OptimisticLockException e) {
System.out.println("Concurrency conflict detected!");
}
@Transactional
public Product updateProduct(Long id, double newPrice) {
Product product = entityManager.find(Product.class, id, LockModeType.PESSIMISTIC_WRITE);
product.setPrice(newPrice);
return product;
}
Spring ORM এ Locking মেকানিজম সঠিকভাবে ব্যবহার করলে ডেটা ইন্টেগ্রিটি নিশ্চিত করা যায় এবং অ্যাপ্লিকেশনের কনকারেন্সি সমস্যা এড়ানো সম্ভব হয়।
Read more